home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from pprint import pprint
- from pyxmpp.utils import from_utf8
- from pyxmpp.utils import to_utf8
- import libxml2
- from pyxmpp.jid import JID
- from pyxmpp.jabber.disco import DiscoCacheFetcherBase
- from pyxmpp.objects import StanzaPayloadObject
- from pyxmpp.xmlextra import common_doc, get_node_ns_uri
- BYTESTREAMS_NS = 'http://jabber.org/protocol/bytestreams'
- BYTESTREAMS_UDP_NS = BYTESTREAMS_NS + '#udp'
-
- class StreamHost(StanzaPayloadObject):
- xml_element_name = 'streamhost'
- xml_element_namespace = BYTESTREAMS_NS
-
- def __init__(self, xmlnode_or_jid, host = None, port = None, zeroconf = None):
- if isinstance(xmlnode_or_jid, libxml2.xmlNode):
- self.from_xml(xmlnode_or_jid)
- else:
- self.jid = JID(xmlnode_or_jid)
- self.host = host
- self.port = port
- self.zeroconf = zeroconf
- if not bool(self.port) ^ bool(self.zeroconf):
- raise ValueError, 'StreamHost element requires one of [port, zeroconf]'
-
-
-
- def from_xml(self, node):
- if node.type != 'element':
- raise ValueError, 'XML node is not a streamhost (not en element)'
-
- ns = get_node_ns_uri(node)
- if ns or ns != self.xml_element_namespace or node.name != self.xml_element_name:
- raise ValueError, 'XML node is not a %s descriptor' % self.xml_element_name
-
- jid = JID(node.prop('jid').decode('utf-8'))
- self.jid = jid
- host = node.prop('host').decode('utf-8')
- self.host = host
- port = node.prop('port')
- self.port = None if port else None
- zeroconf = node.prop('zeroconf')
- self.zeroconf = None if zeroconf else None
-
-
- def __eq__(self, other):
- if other is self:
- return True
-
- if not isinstance(other, self.__class__):
- return False
-
- if self.jid == other.jid and self.host == other.host and self.port == other.port:
- pass
- return self.zeroconf == other.zeroconf
-
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
-
- def __hash__(self):
- return hash((self.jid, self.host, self.port, self.zeroconf))
-
-
- def complete_xml_element(self, xmlnode, _unused):
- xmlnode.setProp('jid', JID(self.jid).as_utf8())
- xmlnode.setProp('host', unicode(self.host).encode('utf-8'))
- if self.port:
- xmlnode.setProp('port', unicode(self.port).encode('utf-8'))
-
- if self.zeroconf:
- xmlnode.setProp('zeroconf', unicode(self.zeroconf).encode('utf-8'))
-
-
-
- def __str__(self):
- n = self.as_xml(doc = common_doc)
- r = n.serialize()
- n.unlinkNode()
- n.freeNode()
- return r
-
-
-
- class ByteStreams(StanzaPayloadObject):
- xml_element_name = 'query'
- xml_element_namespace = BYTESTREAMS_NS
-
- def __init__(self, xmlnode_or_node = None, sid = None, mode = None):
- self.hosts = []
- self.sid = sid
- self.mode = mode
- self.activate = None
- self.host_used = None
- if isinstance(xmlnode_or_node, libxml2.xmlNode):
- self.from_xml(xmlnode_or_node)
- else:
- self.node = xmlnode_or_node
-
-
- def from_xml(self, node, strict = True):
- node_ = node.prop('node')
- sid = node.prop('sid')
- self.sid = None if sid else None
- mode = node.prop('mode')
- self.mode = None if mode else None
- self.mode = None if self.mode != 'tcp' else None
- if node_:
- self.node = node_.decode('utf-8')
- else:
- self.node = None
- if node.type != 'element':
- raise ValueError, 'XML node is not a bytestreams (not en element)'
-
- ns = get_node_ns_uri(node)
- if ns or ns != BYTESTREAMS_NS or node.name != 'query':
- raise ValueError, 'XML node is not a bytestreams query'
-
- n = node.children
- while n:
- if n.type != 'element':
- n = n.next
- continue
-
- ns = get_node_ns_uri(n)
- if ns and ns != BYTESTREAMS_NS:
- n = n.next
- continue
-
- if n.name == 'streamhost':
-
- try:
- self.add_host(n)
- except ValueError:
- if strict:
- raise
-
- except:
- strict
-
-
- None<EXCEPTION MATCH>ValueError
- if n.name == 'streamhost-used':
- host_used = JID(n.prop('jid').decode('utf-8'))
- self.host_used = host_used
- elif n.name == 'activate':
- activate = JID(n.getContent())
- self.activate = activate
-
- n = n.next
-
-
- def complete_xml_element(self, xmlnode, _unused):
- if self.node:
- xmlnode.setProp('node', to_utf8(self.node))
-
- if self.sid:
- xmlnode.setProp('sid', to_utf8(self.sid))
-
- if self.mode and self.mode != 'tcp':
- xmlnode.setProp('mode', to_utf8(self.mode))
-
- for host in self.hosts:
-
- try:
- host.as_xml(xmlnode, _unused)
- continue
- pprint(host)
- raise
- continue
-
-
- if self.activate:
- xmlnode.newChild(None, 'activate', JID(self.activate).as_utf8())
-
- if self.host_used:
- h = xmlnode.newChild(None, 'streamhost-used', None)
- h.setProp('jid', JID(self.host_used).as_utf8())
-
-
-
- def __str__(self):
- n = self.as_xml(doc = common_doc)
- r = n.serialize()
- n.unlinkNode()
- n.freeNode()
- return r
-
-
- def add_host(self, streamhost_jid, host = None, port = None, zeroconf = None):
- sh = StreamHost(streamhost_jid, host, port, zeroconf)
- self.hosts.append(sh)
- return sh
-
-
-
- def register_streamhost_cache_fetchers(cache_suite, stream):
- tmp = stream
-
- class ByteStreamsCacheFetcher((DiscoCacheFetcherBase,)):
- stream = tmp
- disco_class = ByteStreams
- __response = DiscoCacheFetcherBase._DiscoCacheFetcherBase__response
- __error = DiscoCacheFetcherBase._DiscoCacheFetcherBase__error
- __timeout = DiscoCacheFetcherBase._DiscoCacheFetcherBase__timeout
-
- def fetch(self):
- Iq = Iq
- import pyxmpp.iq
- (jid, node) = self.address
- iq = Iq(to_jid = jid, stanza_type = 'get')
- disco = self.disco_class(node)
- disco.as_xml(iq.xmlnode)
- self.stream.set_response_handlers(iq, self._ByteStreamsCacheFetcher__response, self._ByteStreamsCacheFetcher__error, self._ByteStreamsCacheFetcher__timeout)
- self.stream.send(iq)
-
-
- cache_suite.register_fetcher(ByteStreams, ByteStreamsCacheFetcher)
-
-